package studio.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import studio.excepcion.DAOExcepcion;
import studio.modelo.TipoUsuario;
import studio.modelo.Usuario;
import studio.util.ConexionBD;

public class UsuarioDAO extends BaseDAO {

	public boolean login(Usuario usuario) throws DAOExcepcion {
		System.out.println("UsuarioDAO: obtener(Usuario usuario)");
		Usuario vo = new Usuario();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idUsuario from Usuario where idUsuario = ? and clave = ?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, usuario.getIdUsuario());
			stmt.setString(2, usuario.getClaveIngreso());
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdUsuario(rs.getInt(1));				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		if (vo.getIdUsuario() == 0) {
			return false;
		}
		else{
			return true;
		}
	}

	public void insertar(Usuario vo) throws DAOExcepcion {
		System.out.println("UsuarioDAO: insertar(Usuario vo)");
		String query = "INSERT INTO usuario(docIdentidad, nombre, email, fechaNacimiento, clave, TipoUsuario_idTipoUsuario) VALUES (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getDocIdentidad());
			stmt.setString(2, vo.getNombres());
			stmt.setString(3, vo.geteMail());
			stmt.setString(4, vo.getFechaNacimiento());
			stmt.setString(5, vo.getClaveIngreso());
			stmt.setInt(6, vo.getTipo());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	//SELECT idtipousuario,descripcion FROM tipousuario;
	public Collection<TipoUsuario> ListarTipUsuarios() throws DAOExcepcion {
		System.out.println("Sala: ListarTipUsuarios()");
		String query = "SELECT idtipousuario,descripcion FROM tipousuario";
		Collection<TipoUsuario> listaTipUsu = new ArrayList<TipoUsuario>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				TipoUsuario objTipUsu = new TipoUsuario();
				objTipUsu.setIdtipousuario(rs.getInt("idtipousuario"));
				objTipUsu.setDescripcion(rs.getString("descripcion"));			
				listaTipUsu.add(objTipUsu);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listaTipUsu;
	}	
}